perm filename ROMCSC.MF[1,3] blob sn#549057 filedate 1980-12-12 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00008 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	% The Computer Modern Roman family of fonts (by D. E. Knuth, 1979)
C00005 00003	"Upper case ligature AE in the ae position"
C00007 00004	"Upper case ligature OE in the oe position"
C00010 00005	"The letter I in the dotless i position"
C00011 00006	"The letter J in the dotless j position"
C00012 00007	"The Scandinavian letter O-slash in the o-slash position"
C00013 00008	end
C00014 ENDMK
C⊗;
% The Computer Modern Roman family of fonts (by D. E. Knuth, 1979)
danger=mi=0;
input romitu;	% upper case (majuscules)
input romand;	% numerals, ampersand, and question mark
input romitp;	% punctuation symbols common to all roman and italic
input romita;	% accents and other symbols common to roman and italic text
if ligs≠2: error;	% set ligs=2 for caps&smcaps fonts
fi;
codingscheme "TEX TEXT";
input romitl;	% ligatures common with italic
if fixwidth=0: new k,kk,kkk;	% three degrees of kerning
	k=-.5pu; kk=-1.5pu; kkk=-2.5pu;
	lig `F: `V: `W:
		`A kern kkk,
	    `K: `X:
		`O kern k, `C kern k, `G kern k, `Q kern k;
	lig `T: `Y: `P: `A kern kk;
	lig `O: `D: `A kern k, `W kern k, `Y kern k, `V kern k, `X kern k;
	if ucs≠0: lig `R: ;
	fi;
	lig `A: `L: `T kern kk, `O kern k, `U kern k, `C kern k,
		`W kern kkk, `Y kern kk, `G kern k, `V kern kkk,
		`Q kern k;
	texinfo slant, 6pu, 3pu, 2pu, px, 18pu, 2pu;
else: texinfo slant, 9pu, 0, 0, px, 9pu, 9pu;
fi;

new ph,px,pe,pd,pb,po,ps,pas,pa,pw,pwi,pwii,pwiii,pwiv,pwv,pu,lcs,ucs,sc,ls,
	sqrttwo,phh,pssd,pdd;
ph=scph; px=scpx; pe=scpe; pd=scpd; pb=scpb; po=scpo; ps=scps; pas=scpas; pa=scpa;
pw=scpw; pwi=scpwi; pwii=scpwii; pwiii=scpwiii; pwiv=scpwiv; pwv=scpwv;
pu=scpu; lcs=sclcs; ucs=scucs; sc=scsc; ls=scls; sqrttwo=scsqrttwo;
phh=scphh; pssd=scpssd; pdd=scpdd;
call fontbegin;	% reinitialize for `lower case' as upper case
codeoffset='40; input romanu;
if fixwidth=0: new k,kk,kkk;	% three degrees of kerning
	k=-.5pu; kk=-1.5pu; kkk=-2.5pu;
	lig `f: `v: `w:
		`a kern kkk,
	    `k: `x:
		`o kern k, `c kern k, `g kern k, `q kern k;
	lig `t: `y: `p: `a kern kk;
	lig `o: `d: `a kern k, `w kern k, `y kern k, `v kern k, `x kern k;
	if ucs≠0: lig `r: ;
	fi;
	lig `a: `l: `t kern kk, `o kern k, `u kern k, `c kern k,
		`w kern kkk, `y kern kk, `g kern k, `v kern kkk,
		`q kern k;
fi;
"Upper case ligature AE in the ae position";
call charbegin('034,16,2sc,sc,phh,0,armic);
hpen; new w99; w99=round .9[w0,w4];
lft99x1=round 7.25u; x2=x1; top99y1=hh; bot99y2=0;
w99 draw1..2;	% stem
call `a serif(1,99,2,-1-ucs-del/u);
if ucs≠0: call `b serif(1,99,2,.5ucs);	% upper stem serif
	call `c serif(2,99,1,-ucs);
	call `d serif(2,99,1,.5ucs);	% lower stem serif
fi;
rt0x3=round(r-1.5u); x4=x3+.5u; y3=y1; y4=y3-as;
rt0x5=round(r-1.25u); x6=x4+.5u; y5=y2; y6=y5+as;
call `e arm(1,3,4);	% upper arm and serif
call `f arm(2,5,6);	% lower arm and serif
x7=x1; y7=.52[y2,y1]; y8=y7;
if ucs≠0: x8=x9=x10=good0(r-4.5u); y9=y8+.7as; y10=y8-.7as;
	if w0=w4: w0 draw 9..10;	% middle arm serif
	else: x11=x8-u; y11=y8;
		minvr 0; minvs 0;
		w0 ddraw 11{1,0}..10{0,-1}, 8..10;
		ddraw 11{1,0}..9{0,1}, 8..9;	% middle arm serif
		minvr .5; minvs .5;
	fi;
else: x8=x4-u;
fi;
w0 draw 7..8;	% middle arm
lft0x21=round 1.5u; bot0y21=0; lft0x27=lft99x1; top0y27=hh; x23=x27-del-u-eps; y23=y27;
w0 draw 23..21;	% left diagonal stroke
y25=y26=e; x26=x27;
new aa; x25-1=aa[x21,x23]; y25=aa[y21,y23];
w0 draw 25..26;	% bar line
if ucs≠0: call `g dserif(21,0,23,-ucs);
	call `h dserif(21,0,23,ucs);	% left serif
fi.
"Upper case ligature OE in the oe position";
call charbegin('035,18,0,sc,phh,0,armic);
hpen; new w99; w99=round .9[w0,w4];
lft99x1=round 9u; x2=x1; top99y1=hh; bot99y2=0;
w99 draw1..2;	% stem
if ucs≠0:
	call `b serif(1,99,2,.5ucs);	% upper stem serif
	call `d serif(2,99,1,.5ucs);	% lower stem serif
fi;
rt0x3=round(r-1.5u); x4=x3+.5u; y3=y1; y4=y3-as;
rt0x5=round(r-1.25u); x6=x4+.5u; y5=y2; y6=y5+as;
call `e arm(1,3,4);	% upper arm and serif
call `f arm(2,5,6);	% lower arm and serif
x7=x1; y7=.52[y2,y1]; y8=y7;
if ucs≠0: x8=x9=x10=good0(r-4u); y9=y8+.7as; y10=y8-.7as;
	if w0=w4: w0 draw 9..10;	% middle arm serif
	else: x11=x8-u; y11=y8;
		minvr 0; minvs 0;
		w0 ddraw 11{1,0}..10{0,-1}, 8..10;
		ddraw 11{1,0}..9{0,1}, 8..9;	% middle arm serif
		minvr .5; minvs .5;
	fi;
else: x8=x4-u;
fi;
w0 draw 7..8;	% middle arm
if fixwidth≠0: new save; save=sqrttwo;
	new sqrttwo; sqrttwo=sqrt save; % super-superellipse
	lft5x22=round 1.5u;
else: lft5x22=round u;
fi;
x21=7u; top0y21=hh+o; bot0y22=-o;
call `a darc(21,22,w5);	% left part of bowl
x23=x21; y23=y22;
lft0x24=lft99x1; x24=x25; y24=2/3hh; y25=1/3hh;
x26=.85[x21,x24]; y26=.85[y24,y21];
x27=.85[x21,x24]; y27=.85[y25,y23];
w0 draw 21{1,0}..26{x24-x21,y24-y21}..24{0,-1};	% upper right part of bowl
draw 23{1,0}..27{x25-x23,y25-y23}..25{0,1};	% lower right part of bowl
if ucs≠0: if w0≠w4:
	ddraw 21{1,0}..26{x24-x21,y24-y21}..24{0,-1},
		21{1,0}..1{1,0}..1;	% fill in
	ddraw 23{1,0}..27{x25-x23,y25-y23}..25{0,1},
		23{1,0}..2{1,0}..2;	% fill in
	fi;
fi;
if fixwidth≠0: new sqrttwo; sqrttwo=save;
fi.
"The letter I in the dotless i position";
call charbegin('013,6,0,-.5mc(phh.slant-.25pu),phh,0,hic(phh.slant-.25pu));
hpen; x1=x2=good4 .5r; top4y1=hh; bot4y2=0;
w4 draw 1..2;	% stem
new ss;
if ucs≠0: ss=1.1ucs; else: ss=2.25-.5w4/u;
fi;
call `a serif(1,4,2,-ss); call `b serif(1,4,2,ss);	% upper serif
call `c serif(2,4,1,-ss); call `d serif(2,4,1,ss).	% lower serif
"The letter J in the dotless j position";
call charbegin('014,9,0,2sc-.5mc(rstem-pu),phh,0,hic.rstem+.5mi.pu);
hpen; rt4x1=round(r-2u); top4y1=hh; y2=.2hh; x2=x1;
w4 draw 1..2;	% stem
if ucs≠0: call `a serif(1,4,2,-ucs);
	call `b serif(1,4,2,ucs);	% serif
fi;
lft0x4=lft3x5; rt3x5=round 2.75u; y4=y5=1/6hh;
x3=.5[x4,x2]; bot0y3=-o;
call `c arc(3,2,w4);	% tail
w0 draw 3{-1,0}..4{0,1}; cpen; w3 draw 5.	% bulb
"The Scandinavian letter O-slash in the o-slash position";
call charbegin('040,14,0,0,phh+pb,pb,.5phh.slant-.5pu);
hpen; new w99; w99=round .5[w4,w5];
if fixwidth≠0: new save; save=sqrttwo;
	new sqrttwo; sqrttwo=sqrt save; % super-superellipse
	lft99x2=round 1.5u;
else: lft99x2=round u;
fi;
x1=r-x1;	% axis of left-right symmetry
top0y1=hh+o;
bot0y2=-o; y3=y2; x3=r-x2;
call `a darc(1,2,w99);	% left part of bowl
call `b darc(1,3,w99);	% right part of bowl
if fixwidth≠0: new sqrttwo; sqrttwo=save;
fi;
top0y4=hh+b; bot0y5=-b; rt0x4=lft5x3; lft0x5=rt0x2;
w0 draw 4..5;	% diagonal
fi.
end